【第1532期】Lerna包管理
前言
这个工具我也是第一次知道。今日早读文章由阿里@
投稿分享。正文从这开始~~
认识lerna
导读:本章节主要讲解Lerna是什么,Lerna有什么用,如何使用Lerna进行npm包管理,大厂的Lerna版本管理策略是怎么做的,Lerna是如何实现本地包依赖管理以及底层原理是什么? 读者可以带着这些问题去阅读,使学习事半功倍。
一句话理解lerna(面试专用)
A tool for managing JavaScript projects with multiple packages.
Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
翻译:Lerna 是一个用来优化托管在git\npm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
关键字:多仓库管理,多包管理,自动管理包依赖,monoRepos
lerna管理开发者最关心的几个问题
lerna采用的是monorepo模式,它和multrepo有什么区别?
lerna是如何实现内部文件软链的?是npm link么?
lerna在哪些场景下使用会比较优势?
lerna如何安装依赖,如何更新,如何发布?lerna如何提升安装性能?
lerna如何指定发布版本,如何指定发布子目录?
一张图讲解大厂lerna的使用策略
导读:我们一般会把一个大型项目才分两大部分:业务模块 + 通用模块。 由于通用模块会被多个业务模块使用,往往是通过NPM包提供服务。lerna很好的管理多个包以及他们的依赖关系。
Lerna核心原理
monorepo 和 multrepo 区别
monorepo:是将所有的模块统一的放在一个主干分支之中管理。
multrepo:将项目分化成为多个模块,并针对每一个模块单独的开辟一个reporsitory来进行管理。
lerna是如何运作的
导读:lerna是如何做到内部模块的软链和管理,对于作者来说是一个很大的困惑?在npm下,npm link可以在系统目录下建立包软链。软链可以不需要发布,就可以使用本地包,很好的提高开发效率。
阅读源码发现lerna实现软链使用了symlink-dependencies包。最终使用fs.symlink函数实现了文件软链。
Lerna配置
lerna 环境搭建
npm i lerna -g // 全局安装lerna
lerna init // 初始化lerna目录
lerna.json基础配置
{
"version": '0.0.1',
"npmClient": 'cnpm', // yarn, npm
"packages": ['packages/*', 'xx/*'], // 管理多个目录
"command": {
"publish": { // lerna publish配置,忽略*.md文件,
"ignoreChanges": ["*.md"],
"message": "chore(release): publish"
},
"bootstrap": { // lerna bootstrap配置,忽略component-*包
"ignore": "component-*",
"npmClientArgs": ["--no-package-lock"]
}
}
lerna项目目录结构实例
Lerna基本操作
本小节会介绍lerna基本操作命令,如何创建一次lerna的工作流。lerna的常用命令:list, bootstrap, clean, changed, publish。
如何安装依赖
lerna bootstrap
如何查看本地包列表
lerna list
如何删除安装依赖
lerna clean
如何建立软链
lerna link
如何发布安装包
lerna publish
如何创建一次lerna工作流
导读:从lerna boostrap(依赖包安装) —> 开发模块 —> git commit —> lerna changed(查看包变化) —> lerna publish。
lerna bootstrap // 安装依赖包
lerna list // 本地依赖包
lerna changed // 待发布包列表
lerna publish // 发布
Lerna高阶操作(黑科技)
publish 高级应用
导读:某些发布的情况,开发者需要指定安装包版本,或者指定子目录发布。
lerna publish --dist-tag next // 指定当前版本号
lerna publish --contents dist // 指定dist目录为发布目录
bootstrap 性能提升
导读:如果安装包里面有多个基础依赖包,可以使用 —hoist 方式来提升安装性能。
lerna bootstrap --hoist // 提升到根目录
Lerna项目地址:https://github.com/lerna/lerna
关于本文
作者:@马蹄矩阵
原文:https://www.yuque.com/docs/share/b8013b14-1c3a-420a-bcf1-e75ab4553a37
他曾分享过
【第1486期】手淘千牛前端消息开放融合 - 双十一在星巴克消息开放项目的思考实践
【第1483期】前端如何去设计架构能力 - 双十二在星巴克消息开放从点到面的思考实践